package pe.com.bbva.efcap.servidor.controller;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.inject.Inject;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import pe.com.bbva.efcap.servidor.bean.DeudaBean;
import pe.com.bbva.efcap.servidor.bean.SeleccionBean;
import pe.com.bbva.efcap.servidor.bean.ValoresBean;
import pe.com.bbva.efcap.servidor.modelo.entidad.DetalleSimulacion;
import pe.com.bbva.efcap.servidor.modelo.entidad.DeudaInstitucionFinanciera;
import pe.com.bbva.efcap.servidor.modelo.entidad.Indicador;
import pe.com.bbva.efcap.servidor.modelo.entidad.ParametroGeneral;
import pe.com.bbva.efcap.servidor.modelo.entidad.Simulacion;
import pe.com.bbva.efcap.servidor.servicio.DetalleSimulacionService;
import pe.com.bbva.efcap.servidor.servicio.DeudaService;
import pe.com.bbva.efcap.servidor.servicio.IndicadorService;
import pe.com.bbva.efcap.servidor.servicio.ParametroGeneralService;
import pe.com.bbva.efcap.servidor.util.Constante;

@Component("finPropMB")
@Scope("session")
public class FinanciamientoPropuestoController implements Serializable {

	private static final Logger LOGGER = LoggerFactory.getLogger(FinanciamientoPropuestoController.class);
	private static final long serialVersionUID = 1L;
	
	@Autowired
	private ParametroGeneralService paramGenService;
	
	@Autowired
	private IndicadorService indicadorService;
	
	@Inject
	private CabeceraSimulacionController cabecera;
	
	@Autowired
	private DetalleSimulacionService detSimService;
	
	private String idSimulacion;
	private String idIndicador;
	private List<SeleccionBean> tipoFinanLargoPlazo;
	private List<SeleccionBean> recursoCuotaInicial;
	private List<SeleccionBean> estadoFinancieroRef;
	private Long selectedTipoFinanLargoPlazo;
	private Long selectedRecursoCuotaInicial;
	private Long selectedEstadoFinancieroRef;
	private BigDecimal inversionPropuesta1;
	private BigDecimal inversionPropuesta2;
	private BigDecimal tasaEfectiva1;
	private BigDecimal tasaEfectiva2;
	private BigDecimal plazoGracia1;
	private BigDecimal plazoGracia2;
	private BigDecimal plazoTotal1;
	private BigDecimal plazoTotal2;
	private List<DeudaBean> lDeudasBanco;
	Simulacion sim;
	
	@PostConstruct
	public void init() {
		try {
			LOGGER.info("Entro a Financiamiento Propuesto Controller.");
			idSimulacion="1";
			sim = new Simulacion();
			sim.setIdSimulacion(Long.parseLong(idSimulacion));
			tipoFinanLargoPlazo = new ArrayList<SeleccionBean>();
			cargarComboTipoFinanLargoPlazo();
			recursoCuotaInicial = new ArrayList<SeleccionBean>();
			cargarComboRecursoCuotaInicial();
			estadoFinancieroRef = new ArrayList<SeleccionBean>();
			cargarComboEstadoFinancieroRef();
			lDeudasBanco = new ArrayList<DeudaBean>();
			listarDeudasBanco();
			cargarInversionPropuesta1();
		} catch (Exception e) {
			LOGGER.debug(Constante.EXECPCION_ENCONTRADA + e.toString(), e);
		}
	}
	
	public void listarDeudasBanco(){
		int idCliente = 1;
		String tipo = "deudaBancos";
		//lDeudasBanco = deudaService.obtenerDeudasCliente(idCliente, tipo);
	}
	
	public void guardarValores(){
		DetalleSimulacion invProp1= new DetalleSimulacion();
		Indicador ind = new Indicador();
		ind.setCodigo(idIndicador);
		invProp1.setIndicador(ind);
		invProp1.setSimulacion(sim);
		invProp1.setValor(String.valueOf(inversionPropuesta1));
		invProp1.setTipoDependencia(new BigDecimal(Constante.NUMERO_ENTERO_CERO));
		invProp1.setRecalcular(new BigDecimal(Constante.NUMERO_ENTERO_CERO));
		detSimService.guardarDetalleSimulacion(invProp1);
	}
	
	private void cargarInversionPropuesta1() {
		Indicador in = detSimService.obtenerIndicadorPorCodigo(Constante.INV_PROP_DE1, idSimulacion);
		inversionPropuesta1 = BigDecimal.valueOf(Double.parseDouble(in.getCodigo()));
		idIndicador = in.getCodigo();
	}
	
	private void cargarInversionPropuesta2() {
		Indicador in = detSimService.obtenerIndicadorPorCodigo(Constante.INV_PROP_DE2, idSimulacion);
		inversionPropuesta2 = BigDecimal.valueOf(Double.parseDouble(in.getCodigo()));
	}
	
	private void cargarTasaEfectiva1() {
		Indicador in = detSimService.obtenerIndicadorPorCodigo(Constante.APO_DE1, idSimulacion);
		tasaEfectiva1 = BigDecimal.valueOf(Double.parseDouble(in.getCodigo()));
	}
	
	private void cargarTasaEfectiva2() {
		Indicador in = detSimService.obtenerIndicadorPorCodigo(Constante.TEA_DE2, idSimulacion);
		tasaEfectiva2 = BigDecimal.valueOf(Double.parseDouble(in.getCodigo()));
	}
	
	private void cargarPlazoGracia1() {
		Indicador in = detSimService.obtenerIndicadorPorCodigo(Constante.PLA_GRA_DE1, idSimulacion);
		plazoGracia1 = BigDecimal.valueOf(Double.parseDouble(in.getCodigo()));
	}
	
	private void cargarPlazoGracia2() {
		Indicador in = detSimService.obtenerIndicadorPorCodigo(Constante.PLA_GRA_DE2, idSimulacion);
		plazoGracia2 = BigDecimal.valueOf(Double.parseDouble(in.getCodigo()));
	}
	
	private void cargarPlazoTotal1() {
		Indicador in = detSimService.obtenerIndicadorPorCodigo(Constante.PLA_DE1, idSimulacion);
		plazoTotal1 = BigDecimal.valueOf(Double.parseDouble(in.getCodigo()));
	}
	
	private void cargarPlazoTotal2() {
		Indicador in = detSimService.obtenerIndicadorPorCodigo(Constante.PLA_DE1, idSimulacion);
		plazoTotal2 = BigDecimal.valueOf(Double.parseDouble(in.getCodigo()));
	}
	
	private void cargarComboEstadoFinancieroRef() {
		estadoFinancieroRef = new ArrayList<SeleccionBean>();
		List<ValoresBean> params = detSimService.buscarNumeroPeriodos(idSimulacion);
		for (ValoresBean vb : params) {
			SeleccionBean sb = new SeleccionBean();
			sb.setCodigo(vb.getCodigo());
			sb.setDescripcion(vb.getDescripcion());
			estadoFinancieroRef.add(sb);
		}
	}
	
	private void cargarComboTipoFinanLargoPlazo() {
		tipoFinanLargoPlazo = new ArrayList<SeleccionBean>();
		ParametroGeneral paramPadre = paramGenService.buscarParametroGeneralPorNombreCorto(Constante.PARAM_TIPO_FINANCIAMIENTO_LP);
		List<ParametroGeneral> params = paramGenService.buscarParametrosGeneralesPorTipo(paramPadre.getIdParametro());
		for (ParametroGeneral pg : params) {
			SeleccionBean sb = new SeleccionBean();
			sb.setCodigo(pg.getIdParametro());
			sb.setDescripcion(pg.getNombreLargo());
			tipoFinanLargoPlazo.add(sb);
		}
	}
	
	private void cargarComboRecursoCuotaInicial() {
		recursoCuotaInicial = new ArrayList<SeleccionBean>();
		ParametroGeneral paramPadre = paramGenService.buscarParametroGeneralPorNombreCorto(Constante.PARAM_RECURSOS_CUOTA_INICIAL);
		List<ParametroGeneral> params = paramGenService.buscarParametrosGeneralesPorTipo(paramPadre.getIdParametro());
		for (ParametroGeneral pg : params) {
			SeleccionBean sb = new SeleccionBean();
			sb.setCodigo(pg.getIdParametro());
			sb.setDescripcion(pg.getNombreLargo());
			recursoCuotaInicial.add(sb);
		}
	}

	public String getIdSimulacion() {
		return idSimulacion;
	}

	public void setIdSimulacion(String idSimulacion) {
		this.idSimulacion = idSimulacion;
	}

	public List<SeleccionBean> getTipoFinanLargoPlazo() {
		return tipoFinanLargoPlazo;
	}

	public void setTipoFinanLargoPlazo(List<SeleccionBean> tipoFinanLargoPlazo) {
		this.tipoFinanLargoPlazo = tipoFinanLargoPlazo;
	}

	public List<SeleccionBean> getRecursoCuotaInicial() {
		return recursoCuotaInicial;
	}

	public void setRecursoCuotaInicial(List<SeleccionBean> recursoCuotaInicial) {
		this.recursoCuotaInicial = recursoCuotaInicial;
	}

	public List<SeleccionBean> getEstadoFinancieroRef() {
		return estadoFinancieroRef;
	}

	public void setEstadoFinancieroRef(List<SeleccionBean> estadoFinancieroRef) {
		this.estadoFinancieroRef = estadoFinancieroRef;
	}

	public Long getSelectedTipoFinanLargoPlazo() {
		return selectedTipoFinanLargoPlazo;
	}

	public void setSelectedTipoFinanLargoPlazo(Long selectedTipoFinanLargoPlazo) {
		this.selectedTipoFinanLargoPlazo = selectedTipoFinanLargoPlazo;
	}

	public Long getSelectedRecursoCuotaInicial() {
		return selectedRecursoCuotaInicial;
	}

	public void setSelectedRecursoCuotaInicial(Long selectedRecursoCuotaInicial) {
		this.selectedRecursoCuotaInicial = selectedRecursoCuotaInicial;
	}

	public Long getSelectedEstadoFinancieroRef() {
		return selectedEstadoFinancieroRef;
	}

	public void setSelectedEstadoFinancieroRef(Long selectedEstadoFinancieroRef) {
		this.selectedEstadoFinancieroRef = selectedEstadoFinancieroRef;
	}

	public BigDecimal getInversionPropuesta1() {
		return inversionPropuesta1;
	}

	public void setInversionPropuesta1(BigDecimal inversionPropuesta1) {
		this.inversionPropuesta1 = inversionPropuesta1;
	}

	public BigDecimal getInversionPropuesta2() {
		return inversionPropuesta2;
	}

	public void setInversionPropuesta2(BigDecimal inversionPropuesta2) {
		this.inversionPropuesta2 = inversionPropuesta2;
	}

	public BigDecimal getTasaEfectiva1() {
		return tasaEfectiva1;
	}

	public void setTasaEfectiva1(BigDecimal tasaEfectiva1) {
		this.tasaEfectiva1 = tasaEfectiva1;
	}

	public BigDecimal getTasaEfectiva2() {
		return tasaEfectiva2;
	}

	public void setTasaEfectiva2(BigDecimal tasaEfectiva2) {
		this.tasaEfectiva2 = tasaEfectiva2;
	}

	public BigDecimal getPlazoGracia1() {
		return plazoGracia1;
	}

	public void setPlazoGracia1(BigDecimal plazoGracia1) {
		this.plazoGracia1 = plazoGracia1;
	}

	public BigDecimal getPlazoGracia2() {
		return plazoGracia2;
	}

	public void setPlazoGracia2(BigDecimal plazoGracia2) {
		this.plazoGracia2 = plazoGracia2;
	}

	public BigDecimal getPlazoTotal1() {
		return plazoTotal1;
	}

	public void setPlazoTotal1(BigDecimal plazoTotal1) {
		this.plazoTotal1 = plazoTotal1;
	}

	public BigDecimal getPlazoTotal2() {
		return plazoTotal2;
	}

	public void setPlazoTotal2(BigDecimal plazoTotal2) {
		this.plazoTotal2 = plazoTotal2;
	}

	public List<DeudaBean> getlDeudasBanco() {
		return lDeudasBanco;
	}

	public void setlDeudasBanco(List<DeudaBean> lDeudasBanco) {
		this.lDeudasBanco = lDeudasBanco;
	}

		
}
